iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

新手 R 語言學習紀錄系列 第 22

Day 22- R語言 匯入&整理外部檔案資料

  • 分享至 

  • xImage
  •  

Day 22- R語言 匯入&整理外部檔案資料
(前言:內個,我只是個剛接觸程式設計的小萌新,如果內文內容或程式碼寫的不對,還請各位大大指教 Orz)

在做資料處理或資料視覺化的時候,我們可能要從外部excel檔案或者是csv檔案直接匯入數據,而不是直接使用R的sample函數或向量產生數據,這時候,R的資料匯入功能就很好用了,今天我們要來學習如何使用R的匯入excel表格功能,另外也學習進行簡單的資料整理,防止資料缺漏對計算結果產生影響

今天我們就用一份來自UCI Machine Learning Repository 的空氣品質監測資料來進行繪圖。這份空氣品質監測資料的測量地點應該是在北京昌平(Chang Ping),總共有35,064筆資料,如果要下載的話可以來這邊: https://archive.ics.uci.edu/ml/datasets/Beijing+Multi-Site+Air-Quality+Data

(備註:為了不折磨電腦加縮短資料處理時間,我將34,064筆資料刪除,剩餘1000筆資料)

首先介紹用程式碼指定讀取.csv檔案

由於下載的檔案是.csv格式,我們就不用再做額外處理。首先,我們要先用getwd()確認一下工作環境,如果工作環境與.csv檔案所放置的地方不一致的話,R會抓不到檔案。如果要切環工作環境就用setwd(工作環境路徑)執行。接下來用read.csv()函數指定csv檔案,完成後會有csv的部分行數預覽出現(這個部分也可以由head()函數隨時執行,但是要先將read.csv儲存至一個變數上)。以上程式碼如下列:

getwd()
setwd("/Users/randy/Desktop")
cp <- read.csv("air_cp.csv")
head(cp)

輸出結果如下列:
https://ithelp.ithome.com.tw/upload/images/20191008/20120887RP9NZLYI7D.png

如果要檢查欄位名稱的話,可以用colnames執行,輸出結果如下列:

> colnames(cp)
 [1] "No"    "year"  "month" "day"   "hour"  "PM2.5" "PM10"  "SO2"   "NO2"  
[10] "CO"    "O3"    "TEMP"  "RAIN"  "WSPM"

如果今天要一次操作多個檔案的話,可以先將所有檔案放進一個資料夾,然後用統一方式命名及編號(在範例裡我是用air_號碼),然後用setwd將工作環境指定到存放檔案的資料夾中,

{
getwd()
setwd("/Users/randy/Desktop/air_data")
step1 <- list.files(path = "/Users/randy/Desktop/air_data", pattern = "air_.*csv")
step2 <- lapply(step1, read.csv)
step3 <- rbind(step2)
head(step2)
}

第一步是指定環境還有檔案的命名規則(規律),第二步使用lapply函數將剛剛第一個檔案列表全部應用read.csv函數,最後第三步把剛剛讀出的檔案合併成一個大表格

回到剛剛的air_cp 上,如果要檢查一個欄位中是否含有在其他欄位重複的元素,可以使用duplicated()函數

接下來要學的是如何將多個欄合併成為一個新的欄位。其實方法很簡單,用paste函數就可以達到這個效果。程式碼如
下:

cp$date <- paste(cp$year,cp$month, cp$day, sep = “/”)

可以看到,我們用paste 這個函數把cp裡面的year, month, 還有day欄位合併成date。既然現在有一個獨立的date欄位,那我們可以把year, month, day欄位刪除啦 ˊˇˋ ,要刪除欄位的話,可以用下列程式碼執行:

cp[, !(colnames(cp) %in% c("year", "month", "day"))]

最後,我們重新排序數據,讓數據以 "No","date","hour","PM2.5","PM10","SO2","NO2","CO","O3","TEMP","RAIN","WSPM" 的方式排列,程式碼如下:

cp <- cp[c("No","date","hour","PM2.5","PM10","SO2","NO2","CO","O3","TEMP","RAIN","WSPM")]

整理後看起來會像這樣:
https://ithelp.ithome.com.tw/upload/images/20191008/20120887e9vWsNeYcp.png

最後,透過使用str()函數,可以得知每一個欄位的資料型態。就cp這個表格來說,輸出結果如下:
https://ithelp.ithome.com.tw/upload/images/20191008/201208872dZK9gcd3C.png

參考資料:

  1. Stackoverflow 論壇
  2. Codecademy R語言教學 https://www.codecademy.com/learn/learn-r
  3. 資料科學與R語言 https://yijutseng.github.io/DataScienceRBook/io.html

上一篇
Day 21- R語言 迴圈控制-for, while
下一篇
Day 23- R語言 資料篩選&基礎統計
系列文
新手 R 語言學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言